function newWeight = Learn( weight, output, desiredOutput, input, allOutputs)
    global LEARNING_RATE;
    global MOMENTUM_FACTOR;
    global deltasBackup;
    global checkDeltasBackup;
    
    deltas = [];
    
    %1-Saco los primeros deltas de errores (se tiene en cuenta el treshold)
    i = size(weight,2);
    for j=1:size(output,1)
           deltas{i}(j) = MyGPrima(allOutputs{i}(j))*(desiredOutput(j)-output(j));
    end
  
    %2-Ahora itero y saco el resto hasta la entrada (NO se tiene en cuenta
    %el treshold
    while i>1
        %va con -1 para que NO se tomen en cuenta los threshold
        for j=1:size(weight{i},2)-1
           deltas{i-1}(j) = MyGPrima(allOutputs{i-1}(j))*sum(weight{i}(:,j).*deltas{i}');
        end
        i = i-1;
    end
    
    %3-Ahora empiezo a ajustar los pesos desde el principio hasta el final
    output = input;
    
    %Concatenar en cada capa el threshold nodo con input -1
    aux = [-1];
    input = [input;aux];
    
    for i=1:size(weight,2)
       allOutputs{i} = [allOutputs{i};-1];
    end
    
    %itero por perceptrones simples
    for i=1:size(weight,2)
       %itero por filas
       for j=1:size(weight{i},1)
          %itero por columnas
          for k=1:size(weight{i},2)
              if i==1
                deltaBack = LEARNING_RATE*deltas{i}(j)*MyG(input(k));
              else
                deltaBack = LEARNING_RATE*deltas{i}(j)*MyG(allOutputs{i-1}(k));
              end
              
              newWeight{i}(j,k) = weight{i}(j,k) + deltaBack;
              
              %MOMENTUM
              if checkDeltasBackup ~= 0
                  newWeight{i}(j,k) = newWeight{i}(j,k) + MOMENTUM_FACTOR*deltasBackup{i}(j);
              end
              
              deltasBackup{i}(j) = deltaBack;
          end
       end
    end
    
    %Despues de la primer pasada por aca, seteo para saber que ya tengo
    %deltasBackup con algo
    checkDeltasBackup = 1;
    
    
    
    
    
   
    
    
    
   

